package com.seqb.utils;

import freemarker.core.XMLOutputFormat;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class WordUtil {

    public static void main(String[] args) {
        new WordUtil().test();
    }

    public void test() {
        try {
            //step1 创建freeMarker配置示例
            Configuration configuration = new Configuration(new Version("2.3.0"));
            //设置编码格式为utf-8
            configuration.setDefaultEncoding("UTF-8");
            configuration.setOutputFormat(XMLOutputFormat.INSTANCE);
            //批量引入file文件下的多个ftl模板文件
            //第一种方式根据某个类的相对路径指定
            //configuration.setClassForTemplateLoading(WordUtil.class,"file/");
            //获取file/文件下的某个模板文件
            //Template template = configuration.getTemplate("file/test.ftl");
            //第二种方式指定路径
            //step2 获取模板路径
            configuration.setDirectoryForTemplateLoading(new File("d:/ftl"));
            //step3 创建数据模型
            Map<String, Object> dataMap = new HashMap<>();
            dataMap.put("Demo1", "1测试哈哈哈哈");
            dataMap.put("Demo2", "2测试哈哈哈哈");
            dataMap.put("Demo3", "3测试哈哈哈哈");
            dataMap.put("Demo4", "4测试哈哈哈哈");
            //step4  加载模板文件
            Template template = configuration.getTemplate("demo.ftl", "UTF-8");
            //step5  定义输出文件流
            File outFile = new File("d:/ftl/test.doc");
            //如果输出目标文件夹不存在，则创建
            if (!outFile.getParentFile().exists()) {
                outFile.getParentFile().mkdirs();
            }
            //
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
            //step6 输出文件 模板文件参考数据模型值 输出到输出文件中
            template.process(dataMap, out);
            //关闭流
            out.flush();
            out.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
